// pages/story/story.js
const api = require('../../utils/api');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    searchType: '',
    searchOptions: [
        { text: '按故事名搜索', value: 'name' },
        { text: '按作者名搜索', value: 'author' },
        { text: '按类别搜索',value: 'type'}
    ],
    pageNum:1,
    pageSize:9,
    value: '',
    storyList: [],
    searchResult: [],
    showResult: false,
    showAll: true,
    selectedIndex: 0,
    searchParams:{},
    likeStoryIds: [],
    isLoading: false,
    hasMore: true
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 读取本地存储的已收藏ID
    const storedLikeIds = wx.getStorageSync('likeStoryIds') || [];
    this.setData({
        likeStoryIds: storedLikeIds,
        'searchParams.isLike': true // 默认显示已收藏页面
    }, () => {
        this.loadStoryList(); // 加载列表时会匹配收藏状态
    });
  },

  //点赞
 // 点击爱心触发收藏/取消收藏
getLike(e) {
    const storyId = e.currentTarget.dataset.id;
    const { storyList, likeStoryIds, selectedIndex } = this.data;
    const targetType = 6;
    const storyIndex = storyList.findIndex(item => item.id === storyId);
    
    if (storyIndex === -1) return;
  
    const currentStory = storyList[storyIndex];
    let newIsLike;
  
    // 已收藏页面（selectedIndex=0）：只能取消收藏
    if (selectedIndex === 0) {
      newIsLike = false; // 强制取消收藏
    } else {
      // 全部页面：切换状态
      newIsLike = !currentStory.isLike;
    }
  
    api.like.changeLike(storyId, newIsLike, targetType).then(res => {
      wx.showToast({
        title: newIsLike ? '收藏成功' : '取消收藏',
      });
  
      // 更新本地收藏ID列表
      const newLikedIdsArray = [...likeStoryIds];
      if (newIsLike) {
        // 收藏：添加ID（避免重复）
        if (!newLikedIdsArray.includes(storyId)) {
          newLikedIdsArray.push(storyId);
        }
      } else {
        // 取消收藏：移除ID
        const idIndex = newLikedIdsArray.indexOf(storyId);
        if (idIndex !== -1) {
          newLikedIdsArray.splice(idIndex, 1); // 注意：splice第二个参数是1（删除1项）
        }
      }
  
      // 更新列表状态
      const newStoryList = [...storyList];
      newStoryList[storyIndex].isLike = newIsLike;
  
      this.setData({
        storyList: newStoryList,
        likeStoryIds: newLikedIdsArray
      }, () => {
        // 持久化存储到本地
        wx.setStorageSync('likeStoryIds', newLikedIdsArray);
  
        // 已收藏页面取消收藏后：重新加载列表（移除已取消的项）
        if (selectedIndex === 0 && !newIsLike) {
          this.loadStoryList();
        }
        // 全部页面收藏/取消后：无需重新加载，状态已本地更新
      });
    }).catch(err => {
      console.log(err);
      wx.showToast({
        title: err.data?.msg || '操作失败',
        icon: 'none',
        duration: 2000
      });
    });
  },




  //收藏、未收藏、时间分类
// 切换已收藏/全部页面
changeColor(e) {
    const index = e.currentTarget.dataset.index;
    const searchParams = {};
    if (index === 0) {
      searchParams.isLike = true;
    } else if (index === 1) {
      searchParams.isLike = false;
    }
    
    this.setData({
      selectedIndex: index,
      searchParams: searchParams,
      pageNum: 1, // 重置页码为第一页
      hasMore: true, // 重置“有更多数据”状态
      storyList: [] // 清空原有列表（避免新旧数据混合）
    }, () => {
      this.loadStoryList(); // 重新加载第一页
    });
  },

  //初始化故事列表
  loadStoryList() {
    const { pageNum, pageSize, searchParams, likeStoryIds, isLoading, hasMore, storyList } = this.data;
  
    // 如果正在加载或没有更多数据，直接返回
    if (isLoading || !hasMore) return;
  
    // 标记为“正在加载”
    this.setData({ isLoading: true });
  
    api.story.getStoryList(pageNum, pageSize, searchParams).then(res => {
      const newStoryData = res.records || res.list || res || [];
      // 匹配本地收藏状态
      const newStoryList = newStoryData.map(item => ({
        ...item,
        isLike: likeStoryIds.includes(item.id)
      }));
  
      // 合并数据：第一页直接覆盖，后续页追加
      const mergedStoryList = pageNum === 1 ? newStoryList : [...storyList, ...newStoryList];
  
      // 判断是否还有更多数据（如果返回的数据长度小于pageSize，说明没有更多了）
      const hasMoreData = newStoryData.length >= pageSize;
  
      this.setData({
        storyList: mergedStoryList,
        isLoading: false, // 结束加载
        hasMore: hasMoreData // 更新“是否有更多”状态
      });
    }).catch(err => {
      console.error('加载数据失败：', err);
      this.setData({ isLoading: false }); // 失败也需要结束加载状态
    });
  },

  //获取搜索依据
  onSearchTypeChange(e) {
    this.setData({
      searchType: e.detail
    });
  },

  //输入搜索进行查询
  onInputChange(e){
    if (!this.data.searchType) {
        wx.showToast({ title: '请选择搜索关键词', icon: 'none' });
        return;
      }
      const { searchParams } = this.data;
    if(this.data.searchType == 'name'){
        searchParams.name = e.detail;
        this.loadStoryList();
    };
    if(this.data.searchType == 'author'){
        searchParams.author = e.detail;
        this.loadStoryList();
    };
    if(this.data.searchType == 'type'){
        const category = e.detail;
        switch (category){
            case '其他':
                searchParams.category = 0;
                break;
            case '人物':
                searchParams.category = 1;
                break;
            case '地理':
                searchParams.category = 2;
                break;
            case '食物':
                searchParams.category = 3;
                break;
            case '器物':
                searchParams.category = 4;
                break;
            case '事件':
                searchParams.category = 5;
                break;
            case '技艺':
                searchParams.category = 6;
                break;
            case '信俗':
                searchParams.category = 7;
                break;
            case '生物':
                searchParams.category = 8;
                break;
            case '机构':
                searchParams.category = 9;
                break;
        };
        this.loadStoryList();
    };
    
    this.setData({
        searchParams: searchParams,
        pageNum: 1, // 重置页码为第一页
        hasMore: true, // 重置“有更多数据”状态
        storyList: [] // 清空原有列表
      }, () => {
        this.loadStoryList(); // 重新加载第一页
      });
  },


  gotoStoryDeatil(e){
    const id = e.currentTarget.dataset.id;
    console.log('点击的故事id是：', id);
    wx.navigateTo({
      url: `../storyDetail/storyDetail?id=${id}`,
    });
  },


  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    const storedLikeIds = wx.getStorageSync('likeStoryIds') || [];
    this.setData({
      likeStoryIds: storedLikeIds
    }, () => {
      // 如果当前在已收藏页面，重新加载数据确保与本地一致
      if (this.data.selectedIndex === 0) {
        this.loadStoryList();
      }
    });
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
// 如果还有更多数据，页码+1并加载下一页
    if (this.data.hasMore) {
        this.setData({
        pageNum: this.data.pageNum + 1
        }, () => {
        this.loadStoryList(); // 加载下一页数据
        });
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})